package com.example.proxytest.proxy.dynamicproxy.jdk;

import com.example.proxytest.proxy.MyTransaction;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/* ━━━━━━佛祖保佑━━━━━━
 *                  ,;,,;
 *                ,;;'(    社
 *      __      ,;;' ' \   会
 *   /'  '\'~~'~' \ /'\.)  主
 * ,;(      )    /  |.     义
 *,;' \    /-.,,(   ) \    码
 *     ) /       ) / )|    农
 *     ||        ||  \)
 *     (_\       (_\
 * ━━━━━━永无BUG━━━━━━
 * @author ：zjq
 * @date ：2020/9/7 14:16
 * @description: TODO
 * @version: V1.0
 * @slogan: 天下风云出我辈，一入代码岁月催
 */
public class PersonServiceInterceptor implements InvocationHandler {

    //目标类
    private Object target;
    //增强类
    private MyTransaction myTransaction;

    public PersonServiceInterceptor() {
        System.out.println("jdk 构造");
    }
    //构造函数注入目标类和增强类

    public PersonServiceInterceptor(Object target, MyTransaction myTransaction) {
        this.target = target;
        this.myTransaction = myTransaction;
    }


    //代理类的每一个方法被调用的时候都会调用下边的这个invoke方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("invoke .....");
        System.out.println(method.getName());
        this.myTransaction.beginTransaction();
        Object returnValue = method.invoke(this.target, args);
        this.myTransaction.commit();
        return returnValue;
    }
}
